![]() |
DV 29 - vRefNum Ç©ÇÁéÊìæÇ∑ÇÈ SCSI ID(çXêVì˙: 97 îN 5 åé 23 ì˙) Q: ì¡íËÇÃÉtÉ@ÉCÉãÇä‹ÇfiÉfÉBÉXÉNÉ{ÉäÉÖÅ[ÉÄÇà SCSI IDÇéÊìæÇµÇΩÇ¢ÇÃÇ≈Ç∑Ç™ÅAÇ«ÇÒÇ»ï˚ñ@ǙdžÇÈÇ≈ǵÇÂǧǩÅB A: DZDZÇ≈ÇÕÅAëŒè€ÇΔÇ»ÇÈÉhÉâÉCÉuÇ™ SCSI Ç≈ǻǢ (ÉtÉçÉbÉsÅ[ÅAIDEÅARAM ÉfÉBÉXÉNǻǫ) èÍçáLJå©âzǵǃê‡ñæÇçsǢNjÇ∑ÅB
è„ÇÃéÆÇ…ÇÊÇËÅASCSI 0 Ç…ëŒÇ∑ÇÈÉhÉâÉCÉoÇÕ SCSI Manager 4.3 Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈèÍçáÇÕÅAÅwInside Macintosh:DevicesÅxÇà 4-52 Ç®ÇÊÇ— 4-53 ÉyÅ[ÉWÇÃê‡ñæÇ…ǵÇΩǙǡǃÅA SCSI Manager 4.3 Ç™ë∂ç›Ç∑ÇÈǩǫǧǩÇåüèoÇ∑ÇÈÇ…ÇÕÅAÅwInside Macintosh:Operating System UtilitiesÅxÇà 8-21 Ç©ÇÁ 8-23 ÉyÅ[ÉWÇÃó·Ç…ǵÇΩǙǡǃÅA É{ÉäÉÖÅ[ÉÄÉäÉtÉ@ÉåÉìÉXî‘çÜÇ™ÇÌǩǡǃǢÇÈÇΔÇ∑ÇÈÇΔÅAÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇéÊìæÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃèàóùÇçsǧDžÇÕÅAÅwInside Macintosh:FilesÅxÇà 2-144 ÉyÅ[ÉWÇÃê‡ñæÇ…ǵÇΩǙǡǃÅA OSErr GetDRefNumFromVRefNum(short vRefNum, short *dRefNum) { HParamBlockRec pb; Str27 volName; OSErr result; pb.volumeParam.ioVRefNum = vRefNum; pb.volumeParam.ioNamePtr = volName; pb.volumeParam.ioVolIndex = 0; /* ioVRefNum ÇÃÇ›ÇégópǵÅA É{ÉäÉÖÅ[ÉÄñºÇï‘Ç∑ */ result = PBHGetVInfoSync(&pb); if (result == noErr) *dRefNum = pb.volumeParam.ioVDrvInfo; return result; } ÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇéÊìæÇ≈Ç´ÇΩÇÁÅA éüÇÃÉRÅ[ÉhÇégǢNjÇ∑ ("I Am Curious SCSI" ÇÊÇË)ÅB /* * ì¡íËÇÃÉhÉâÉCÉoÉäÉtÉ@ÉåÉìÉXî‘çÜÇ…ëŒÇ∑ÇÈ SCSI Bus ID ÇéÊìæÇ∑ÇÈÅB DZÇÍÇÕÉIÉäÉWÉiÉãÇà SCSI Manager Ç…ëŒÇµÇƒóLå¯ÅBîÒìØä˙ SCSI Manager ÇÃèÍçáÇÕÅA ÉhÉâÉCÉoÇÕ SCSI Manager Çégǡǃìoò^Ç≥ÇÍǃǢǻǢDZÇΔÇ™ïKóvÅB */ #define DriverRefNumToSCSI(x) ((signed short) (~(x) - 32)) /* * ìoò^Ç≥ÇÍǃǢÇÈÉfÉoÉCÉXÇÃÉäÉXÉgÇåüçıǵǃÅA ì¡íËÇÃÉhÉâÉCÉoÇ…ëŒÇ∑ÇÈ DeviceIdent ÇéÊìæÇ∑ÇÈÅB ê≥èÌÇ…èIóπÇ∑ÇÍÇŒ noErr Ç™ï‘Ç≥ÇÍÅAë∂ç›ÇµÇ»ÇØÇÍÇŒ nsvErr Ç™ï‘Ç≥ÇÍÇÈÅB */ OSErr DriverRefNumToDeviceID( short driverRefNum, DeviceIdent *deviceIdentPtr ) { OSErr status, scsiStatus; SCSI_DriverPB pb; short targetID; status = nsvErr; if (AsynchronousSCSIManagerPresent()) { /* * ìoò^Ç≥ÇÍǃǢÇÈÉhÉâÉCÉoÇÃÉäÉXÉgÇÉXÉLÉÉÉìǵǃÅA DZÇÃdriverRefNum Çå©Ç¬ÇØÇÈ */ ClearMemory((ptr) &pb, sizeof pb); pb.scsiPBLength = sizeof (SCSI_Driver_PB); pb.scsiCompletion = NULL; pb.scsiFlags = 0; pb.scsiFunctionCode = SCSILookupRefNumXref; /* DeviceIdent ÇÃèâä˙ílÇΔǵǃ "ïsâ¬î\Ç»" ílÇê›íËǵǃÅA ÉXÉLÉÉÉìÉvÉçÉZÉXÇäJénÇ∑ÇÈÅB SCSIAction Ç…ÇÊÇËÅApb.scsiDevice Ç…åªç›ÇÃÉfÉoÉCÉXÇ™ï‘Ç≥ÇÍÅA pb.scsiNextDevice Ç…éüÇ…ìoò^Ç≥ÇÍǃǢÇÈÉfÉoÉCÉXÇ™ï‘Ç≥ÇÍÇÈÅB ÉãÅ[ÉvèàóùÇçsǧDZÇΔÇ≈ÅAìoò^Ç≥ÇÍǃǢÇÈäeÉfÉoÉCÉXÇèáéüåüç∏Ç≈Ç´ÇÈÅB éüÇÃÉfÉoÉCÉXÇ™ïsê≥Ç»ÉoÉXè„DždžÇÈÇΔÇ´ÇÕÉãÅ[ÉvÇî≤ÇØÇÈÅB ǻǮÅA"ïsê≥Ç»" ê›íËílÇä‹Çfiåªç›ÇÃÉoÉX (pb.scsiDevice.bus) Çà ç≈èâÇÃílÇÕñ≥éãÇ∑ÇÈïKóvǙdžÇÈÅB */ *((long *) &pb.scsiDevice) = -1L; do { scsiStatus = SCSIAction((SCSI_PB *) &pb); if (scsiStatus != noErr) { status = scsiStatus; break; } /* ñ⁄ìIÇÃÉhÉâÉCÉuÇ©? */ if (pb.scsiDriver == driverRefNum /* DZÇÍÇÕñ{ìñÇÃÉoÉXÇ©? */ && pb.scsiDevice.bus != 0xFF) { *deviceIdentPtr = pb.scsiDevice; status = noErr; break; } pb.scsiDevice = pb.scsiNextDevice; } while (pb.scsiDevice.bus != 0xFF); } if (status == nsvErr) { /* * îÒìØä˙ SCSI Manager ǙǻǢǩÅA ÉhÉâÉCÉoÇ™ SCSI Manager Çégǡǃìoò^Ç≥ÇÍǻǩǡÇΩÅB */ targetID = DriverRefNumToSCSI(driverRefNum); if (targetID >= 0 && targetID <= 6) { deviceIdentPtr->diReserved = 0; deviceIdentPtr->diBus = 0; deviceIdentPtr->targetID = targetID; deviceIdentPtr->LUN = 0; status = noErr; } } return (status); }--Brian Bechtel devsupport@apple.com [ Technical Q&A's : Devices : DV29 ] |
![]() |